import time


# time_master 就是一个高阶函数
def time_master(func):
    def call_func():
        print("开始运行程序...")
        start = time.time()
        func()
        stop = time.time()
        print("结束程序运行...")
        print(f"一共耗费了{(stop - start):.2f}秒。")

    return call_func


@time_master
def myfunc():
    time.sleep(2)
    print("I love FishC")


myfunc()

# 开始运行程序...
# I love FishC
# 结束程序运行...
# 一共耗费了2.00秒。


print(myfunc.__name__)  # call_func TODO ? 为什么，这就是装饰器的副作用

print("=" * 100)

# 于是发明了 @wraps 来修正装饰器

# 修改这个副作用
import functools


# time_master 就是一个高阶函数
def time_master(func):
    @functools.wraps(func)
    def call_func():
        print("开始运行程序...")
        start = time.time()
        func()
        stop = time.time()
        print("结束程序运行...")
        print(f"一共耗费了{(stop - start):.2f}秒。")

    return call_func


@time_master
def myfunc():
    time.sleep(2)
    print("I love FishC")


myfunc()


print(myfunc.__name__)  # myfunc
